<?php
/**
 * $Id: Caja.class.php 26 2010-07-17 19:47:41Z corlatti $
 * @author Claudio Corlatti
 *
 */
class Caja {
	private $cuentasCostos;
	
	function __construct() {
		$this->cuentasCostos = new CuentasCostos();
	}
	
	//listo
	public function grabarMovimientoEfectivo($idCliente, $dolares, $tipoDeCambio, $efectivo, $fecha, $fechaFija, $idArticulo) {
		$return = null;
		try {
			
			$movimientoDeCaja = new Movimientodecaja();
			$movimientoDeCaja['tipo'] = 'EFECTIVO';
			$movimientoDeCaja['idProveedor'] = $idCliente;
			$movimientoDeCaja['idArticulo'] = $idArticulo;
			$movimientoDeCaja['fecha'] = $this->convertDateToDbDate($fechaFija);
			
			$obj = new Movimientoefectivo();
			$obj['dolares'] = $dolares;
			$obj['tipoDeCambio'] = $tipoDeCambio;
			$obj['efectivo'] = $efectivo;
			$obj['fecha'] = $this->convertDateToDbDate($fecha);
			
			$obj['Movimientodecaja'] = $movimientoDeCaja;
			
			
			
			$obj->save();
			
			$this->cuentasCostos->grabarCostosEfectivo($movimientoDeCaja['id'], $idArticulo, $idCliente, $dolares, $tipoDeCambio, $efectivo);
						
			$return = $obj;	
		} catch ( Exception $e ) {
			throw $e;
		}
		return $return;
	}
	
	public function grabarMovimientoTransferencia ( $idCliente, $banco, $importe, $moneda, $tipoCambio, $gasto, $fecha, $observaciones, $costo, $fechaFija, $idArticulo ) {
		$return = null;
		try {

			$movimientoDeCaja = new Movimientodecaja();
			$movimientoDeCaja['tipo'] = 'TRANSFERENCIA';
			$movimientoDeCaja['idProveedor'] = $idCliente;
			$movimientoDeCaja['idArticulo'] = $idArticulo;
			$movimientoDeCaja['fecha'] = $this->convertDateToDbDate($fechaFija);
			
			$obj = new Movimientotransferencia();
			
			$obj['idBanco'] = $banco;
			$obj['importe'] = $importe;
			$obj['gasto'] = $gasto;
			$obj['costo'] = $costo;
			$obj['idMoneda'] = $moneda;
			$obj['tipoDeCambio'] = $tipoCambio;
			$obj['fecha'] = $this->convertDateToDbDate($fecha);
			$obj['observaciones'] = $observaciones;
			
			$obj['Movimientodecaja'] = $movimientoDeCaja;
			
			$obj->save();
			$this->cuentasCostos->grabarCostoCheque($movimientoDeCaja['id'], $idArticulo, $idCliente, $importe, $tipoCambio);
			$return = $obj;	
		} catch ( Exception $e ) {
			throw $e;
		}
		return $return;		
	}
	
	//listo
	public function grabarMovimientoChequePropio ($idCliente, $emision, $importe, $fechaDeposito, $banco, $observaciones, $fechaFija, $idArticulo) {
		$return = null;
		try {

			$movimientoDeCaja = new Movimientodecaja();
			$movimientoDeCaja['tipo'] = 'CHEQUEPROPIO';
			$movimientoDeCaja['idProveedor'] = $idCliente;
			$movimientoDeCaja['idArticulo'] = $idArticulo;
			$movimientoDeCaja['fecha'] = $this->convertDateToDbDate($fechaFija);
			
			$obj = new Movimientochequepropio();
			
			$obj['idBanco'] = $banco;
			$obj['importe'] = $importe;
			$obj['fechaEmision'] = $this->convertDateToDbDate($emision);
			$obj['fechaDepositar'] = $this->convertDateToDbDate($fechaDeposito);
			$obj['observaciones'] = $observaciones;
			
			$obj['Movimientodecaja'] = $movimientoDeCaja;
			
			$obj->save();
			$this->cuentasCostos->grabarCostoCheque($movimientoDeCaja['id'], $idArticulo, $idCliente, $importe, 1);
			$return = $obj;	
		} catch ( Exception $e ) {
			throw $e;
		}
		return $return;		
	}	
	
	public function grabarMovimientoChequeCartera ($idCliente, $fecha, $cheques, $fechaFija, $idArticulo) {
		$return = null;
		try {

			$movimientoDeCaja = new Movimientodecaja();
			$movimientoDeCaja['tipo'] = 'CHEQUECARTERA';
			$movimientoDeCaja['idProveedor'] = $idCliente;
			$movimientoDeCaja['idArticulo'] = $idArticulo;
			$movimientoDeCaja['fecha'] = $this->convertDateToDbDate($fechaFija);
			$movimientoDeCaja->save();
			
			foreach ($cheques as $cheque){
				$obj = new Movimientochequecartera();
				$obj['idCheque'] = $cheque;
				$obj['fecha'] = $this->convertDateToDbDate($fecha);
				$obj['Movimientodecaja'] = $movimientoDeCaja;
				$obj->save();
			}
			//$this->cuentasCostos->grabarCostoCheque($movimientoDeCaja['id'], $idArticulo, $idCliente, $cheques, 1);
			
			$return = $obj;	
		} catch ( Exception $e ) {
			throw $e;
		}
		return $return;		
	}		
	
	//listo
	public function grabarMovimientoCheque($idCliente, $fechaRecibido, $idRecibidoDe, $numeroDeCheque, 
											$importe, $fechaADepositar, $idBanco, $observaciones, $fechaFija, $idArticulo) {
		try {
			
			$movimientoDeCaja = new Movimientodecaja();
			$movimientoDeCaja['tipo'] = 'CHEQUE';
			$movimientoDeCaja['idProveedor'] = $idCliente;
			$movimientoDeCaja['idArticulo'] = $idArticulo;
			$movimientoDeCaja['fecha'] = $this->convertDateToDbDate($fechaFija);
			
			$obj = new Movimientocheque();
			$obj['fechaRecibido'] = $this->convertDateToDbDate($fechaRecibido);
			$obj['recibidoDeCliente'] = $idRecibidoDe;
			$obj['numero'] = $numeroDeCheque;
			$obj['importe'] = $importe;
			$obj['fechaDepositar'] = $this->convertDateToDbDate($fechaADepositar);
			$obj['nota'] = $observaciones;
			$obj['idBanco'] = $idBanco;
			
			$obj['Movimientodecaja'] = $movimientoDeCaja;
			
			$obj->save();
			
			$this->cuentasCostos->grabarCostoCheque($movimientoDeCaja['id'], $idArticulo, $idCliente, $importe, 1);
			$return = $obj;	
			
		} catch ( Exception $e ) {
			throw $e;
		}		
	}

	public function borrarMovimiento($id){
		try {
			$dao = Doctrine::getTable('Movimientodecaja');
			$dao->borrarMovimiento($id);
		} catch(Exception $e){
			throw $e;
		}
	}

	public function checkRequired($values){
		try {
			$keys = array_keys($values);
			for($i=0; $i < count($keys); $i++){
				if(empty($values[$keys[$i]])){
					throw new Exception($keys[$i] . ' es un parametro requerido.');	
				}
			}
		} catch(Exception $e){
			throw $e;
		}
	}
	
	public function convertDateToDbDate($str){
		try {
			$tmp = explode('/', $str);
			return $tmp[2] . '-' . $tmp[1] . '-' . $tmp[0];
		} catch (Exception $e){
			throw $e;
		}	
	}
	
	public function getMovimientos($cantidad, $idCliente){
		$result = null;
		try {
			
			$dao = Doctrine::getTable('Movimientodecaja');
			$q = $dao->getMovimientos($cantidad,null, $idCliente);
			$result = $q->fetchArray();
			
		} catch (Exception $e){
			throw $e;
		}		
		return $result;
	}
	
	public function getChequesEnCartera(){
		$result = null;
		try {
			
			$dao = Doctrine::getTable('Movimientodecaja');
			$q = $dao->getChequesEnCartera();
			$result = $q->fetchArray();
			
		} catch (Exception $e){
			throw $e;
		}		
		return $result;
	}	
	
	public function getChequeEnCartera($id){
		$result = null;
		try {
			
			$dao = Doctrine::getTable('Movimientocheque');
			$q = $dao->find($id);
			$result = $q->fetchArray();
			
		} catch (Exception $e){
			throw $e;
		}		
		return $result;
	}		
	
	public function getImportaciones($idCliente){
		$result = null;
		try {
			
			$stmt = Doctrine_Manager::getInstance()->getCurrentConnection()->prepare('SELECT i.id, i.nroSemana, a.id idArticulo, a.cantidad, (ci.costo * cambio)total
									FROM importacion i, articulos a, costos c, costositem ci
									WHERE i.id = a.idImportacion
									AND a.id = c.idArticulo
									AND ci.idCosto = c.id
									AND c.IdProveedor = ' . $idCliente);
			$stmt->execute();
			$result = $stmt->fetchAll();
		} catch (Exception $e) {
			throw $e;
		}
		return $result;
	
	}
	
	
}

?>